Solid-state drives (SSDs), particularly, NAND-based drives, are increasingly deployed within enterprise datacenters thanks to their high performance and low power consumption. Decreasing cost-per-gigabyte is also accelerating SSD adoption to replace hard disk drives (HDDs) in storage applications. One drawback of SSDs is that, as a device continually writes data, valid data may become fragmented. As such, garbage collection is used to reclaim free space, which includes copying user data to new storage blocks and erasing invalid data storage blocks, thereby allowing the media to store new write data.
However, garbage collection decreases both SSD read and write performance. In addition, garbage collection increases write amplification because individual host data write requests may result in multiple internal SSD writes to the medium. Write amplification occurs, for example, when valid data is first read from a media block about to be erased, then rewritten to another media storage block, accompanied by the write to store new host data. Consequently, write amplification decreases SSD lifetime because each flash chip generally can endure a certain number of writes before it begins to fail.
Multi-streaming is a new capability of flash drives that allows software applications to perform write operations in specified I/O streams based on data properties or groupings, such as data lifetime (amongst many others). Multi-streaming may also be implemented in multi-drive systems such that each drive is mapped to one or more streams in a way that minimizes variation of data. Thus, each I/O stream may correspond to a different storage area of a single multi-streaming SSD or one of a plurality of multi-streaming SSDs.
By storing associated or similar data in the same erase block or same drive, garbage collection may be eliminated or reduced, thereby reducing the over provisioning required in SSDs, and improving their endurance. In other words, multi-streaming allows a flash drive to place data more wisely, which results in less garbage collection, lowered write amplification, and thus increased performance of the SSDs. Currently, stream assignment happens at the application layer, which requires application code to be modified in order to support this feature.
In view of the foregoing, there exists a need for the present system and method of I/O stream selection that improves the performance and endurance of flash storage devices.